//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: DTTimer.h
//创建人  	: Handry
//创建日期	: 
//描述	    : 故障诊断计时器头文件
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    :
//=============================================================================================
#ifndef __DTTIMER_H
#define	__DTTIMER_H

//=============================================================================================
//包含头文件
//=============================================================================================
#include "BSPTypeDef.h"
#include "DTCheck.h"

//=============================================================================================
//宏参数设定
//=============================================================================================
#define DT_TICK 		    50	    		//DT检测任务周期(ms)，取决于放置DTTask的周期是多少ms
#define DT_STARTTIME        40     		 	//DT任务开始启动等待时间(50ms)

//=============================================================================================
//定义数据类型
//=============================================================================================
typedef struct                      //定义数据结构
{
	u8 enable;						//使能
	e_DTLevel faultlevel;			//DT等级，0到4级故障等级
	e_DTState currentstate;			//当前状态，待滤波的状态
	e_DTState state;				//滤波后的状态
	u16 NtoFTime;					//故障成熟时间
	u16 FtoNTime;					//故障消除时间
	u32 timer;            			//计数器
}t_DTTimer;

//=============================================================================================
//声明接口函数
//=============================================================================================
//=============================================================================================
//函数名称	:  void DTTimerInit(void)
//输入参数	:  void
//输出参数	:  void
//函数功能	:  初始化所有自定义计数器
//注意事项	:  
//=============================================================================================
void DTTimerInit(void);

//=============================================================================================
//函数名称	:  void DTTimerConfig(e_DT_ID id, e_DTLevel faultlevel, e_DTState initstate, u16 NtoFTime, u16 FtoNTime)
//输入参数	:  id(故障id), faultlevel(故障等级) initstate(初始状态), NtoFTime(故障成熟时间ms), FtoNTime(故障恢复时间ms)
//输出参数	:  void
//函数功能	:  配置DT数字信号滤波器
//注意事项	:  
//=============================================================================================
void DTTimerConfig(e_DT_ID id, e_DTLevel faultlevel, e_DTState initstate, u16 NtoFTime, u16 FtoNTime);

//=============================================================================================
//函数名称	:  void DTTimerChangeConfig(e_DT_ID id, u16 NtoFTime, u16 FtoNTime)
//输入参数	:  id(故障id), NtoFTime(故障成熟时间ms), FtoNTime(故障恢复时间ms)
//输出参数	:  void
//函数功能	:  更改配置DT数字信号滤波器
//注意事项	:  
//=============================================================================================
void DTTimerChangeConfig(e_DT_ID id, u16 NtoFTime, u16 FtoNTime);

//=============================================================================================
//函数名称	:  void DTTimerStart(e_DT_ID id)
//输入参数	:  id(故障id)
//输出参数	:  void
//函数功能	:  启动数字信号滤波器
//注意事项	:  
//=============================================================================================
void DTTimerStart(e_DT_ID id);

//=============================================================================================
//函数名称	:  void DTTimerStop(e_DT_ID id)
//输入参数	:  id(故障id)
//输出参数	:  void
//函数功能	:  停止数字信号滤波器
//注意事项	:  
//=============================================================================================
void DTTimerStop(e_DT_ID id);

//=============================================================================================
//函数名称	:  void DTTimerTask(void)
//输入参数	:  void
//输出参数	:  void
//函数功能	:  DT检测数字信号滤波任务
//注意事项	:  100ms
//=============================================================================================
void DTTimerTask(void);

//=============================================================================================
//函数名称	:  void DTTimerSetState(e_DT_ID id, e_DTState state)
//输入参数	:  id(故障id), state(状态)
//输出参数	:  void
//函数功能	:  设置状态值
//注意事项	:  
//=============================================================================================
void DTTimerSetState(e_DT_ID id, e_DTState state);

//=============================================================================================
//函数名称	:  void DTTimerSetCurrentState(e_DT_ID id, e_DTState state)
//输入参数	:  id(故障id), state(状态)
//输出参数	:  void
//函数功能	:  设置瞬态值
//注意事项	:  
//=============================================================================================
void DTTimerSetCurrentState(e_DT_ID id, e_DTState state);

//=============================================================================================
//函数名称	:  e_DTLevel DTTimerGetFaultLevel(e_DT_ID id);
//输入参数	:  id(故障id)
//输出参数	:  DT等级，0到4级故障等级
//函数功能	:  获得检测DT的异常等级
//注意事项	:  
//=============================================================================================
e_DTLevel DTTimerGetFaultLevel(e_DT_ID id);

//=============================================================================================
//函数名称	:  e_DTState DTTimerGetState(e_DT_ID id)
//输入参数	:  id(故障id)
//输出参数	:  0(正常) 1(故障)
//函数功能	:  获得当前滤波状态，将过渡态作为相应滤波态输出
//注意事项	:  N-F返回N F-N返回F
//=============================================================================================
e_DTState DTTimerGetState(e_DT_ID id);

//=============================================================================================
//函数名称	:  e_DTState DTTimerGetTransitState(e_DT_ID id)
//输入参数	:  id(故障id)
//输出参数	:  当前过渡态
//函数功能	:  获得当前内部过渡状态
//注意事项	:  
//=============================================================================================
e_DTState DTTimerGetTransitState(e_DT_ID id);

//=============================================================================================
//函数名称	:  e_DTState DTTimerGetCurrentState(e_DT_ID id)
//输入参数	:  id(故障id)
//输出参数	:  当前瞬态状态
//函数功能	:  获得当前瞬态状态
//注意事项	:  
//=============================================================================================
e_DTState DTTimerGetCurrentState(e_DT_ID id);

#endif

/*****************************************end of DTTimer.h*****************************************/
